package thread;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

/**
 * @Description: CyclicBarrier 的用法
 * @Project: testDemo
 * @Author: hjibo
 * @CreateDate: 2019/2/22 09:04
 * @ModificationHistory: （who whatTime doWhat）
 */
public class ThreadMarch implements Runnable{
    // 姓名
    private String name;
    // 可以理解为集合地点
    private CyclicBarrier barrier;

    public ThreadMarch(String name, CyclicBarrier barrier) {
        this.name = name;
        this.barrier = barrier;
    }

    @Override
    public void run() {
        try {
            System.out.println(this.name+" 正在朝这里赶来。。。");
            Thread.sleep(2000);
            System.out.println(this.name+" 到达集合点！");
            // 等待其他队员；await()方法可以带参数，表示等待多长时间，如果到时间还没到那就不等了
            barrier.await();
            // 所有人都到了，开始出发
            System.out.println(this.name+" 出发了！");
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (BrokenBarrierException e) {
            e.printStackTrace();
        }
    }
}
